home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 255_01 / shade.asm < prev    next >
Assembly Source File  |  1988-03-28  |  2KB  |  98 lines

  1.       PAGE     80,132
  2.       PAGE
  3.  
  4. DGROUP      GROUP   GDATA
  5.  
  6. GDATA     SEGMENT PARA PUBLIC 'DATA'
  7.       Extrn   gd_sadr:word,gd_shad:word,gd_gseg:word
  8.       Extrn   gd_flag1:word
  9. GDATA      ENDS
  10.  
  11. _TEXT     SEGMENT BYTE PUBLIC 'CODE'
  12.       Public  _shade
  13.       Extrn   setgc:near
  14.       ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  15.  
  16. _shade      Proc     Near
  17.       PUSH     BP
  18.       MOV     BP,SP
  19.       PUSH     DI
  20.       PUSH     SI
  21.  
  22.       OR     gd_flag1,008h           ; Turn shading mode active
  23.       MOV     SI,[BP+4]
  24.       OR     SI,SI
  25.       JNS     cont
  26.       XOR     AX,AX
  27.  
  28.       POP     SI
  29.       POP     DI
  30.       MOV     SP,BP
  31.       POP     BP
  32.       RET
  33. cont:
  34.       LEA     DI,gd_shad
  35.       MOV     CX,8
  36. shade01:
  37.       PUSH     CX
  38.       MOV     CX,4
  39. shade02:
  40.       LODSB                ; Load pixel color pair
  41.       MOV     BL,AL
  42.       SHR     BL,1
  43.       SHR     BL,1
  44.       SHR     BL,1
  45.       SHR     BL,1
  46.       MOV     BYTE PTR [DI],BL
  47.       ADD     DI,8
  48.       AND     AL,0Fh
  49.       MOV     BYTE PTR [DI],AL
  50.       ADD     DI,8
  51.       LOOP     shade02
  52.  
  53.       POP     CX
  54.       SUB     DI,63
  55.       LOOP     shade01
  56.  
  57.       MOV     AX,0502h
  58.       CALL     setgc
  59.       MOV     AX,08FFh
  60.       CALL     setgc
  61.  
  62.       MOV     ES,gd_gseg
  63.       MOV     SI,[BP+4]           ; Address of the new shade matrix
  64.       MOV     DI,gd_sadr
  65.       MOV     CX,32
  66.       MOV     AL,080h
  67. fbyte01:
  68.       OUT     DX,AL
  69.       MOV     AH,ES:[DI]
  70.       MOV     AH,[SI]
  71.       SHR     AH,1
  72.       SHR     AH,1
  73.       SHR     AH,1
  74.       SHR     AH,1
  75.       MOV     ES:[DI],AH
  76.       ROR     AL,1
  77.       OUT     DX,AL
  78.       MOV     AH,ES:[DI]
  79.       MOV     AH,[SI]
  80.       AND     AH,0Fh
  81.       MOV     ES:[DI],AH
  82.       ROR     AL,1
  83.       ADC     DI,0
  84.       INC     SI
  85.       LOOP     fbyte01
  86.  
  87.       XOR     AX,AX
  88.  
  89.       POP     SI
  90.       POP     DI
  91.       MOV     SP,BP
  92.       POP     BP
  93.       RET
  94. _shade      Endp
  95.  
  96. _TEXT      Ends
  97.       End
  98.